package pro.shushi.pamirs.hr.core.excel.imports;

import com.alibaba.excel.util.StringUtils;
import org.springframework.stereotype.Component;
import pro.shushi.pamirs.file.api.context.ExcelImportContext;
import pro.shushi.pamirs.file.api.enmu.ExcelTemplateTypeEnum;
import pro.shushi.pamirs.file.api.enmu.TaskMessageLevelEnum;
import pro.shushi.pamirs.file.api.extpoint.AbstractExcelImportDataExtPointImpl;
import pro.shushi.pamirs.file.api.extpoint.ExcelImportDataExtPoint;
import pro.shushi.pamirs.file.api.model.ExcelImportTask;
import pro.shushi.pamirs.file.api.model.ExcelWorkbookDefinition;
import pro.shushi.pamirs.file.api.util.ExcelHelper;
import pro.shushi.pamirs.file.api.util.ExcelTemplateInit;
import pro.shushi.pamirs.hr.api.model.eam.BsMtoolMd;
import pro.shushi.pamirs.meta.annotation.ExtPoint;
import pro.shushi.pamirs.meta.annotation.fun.extern.Slf4j;

import java.util.Collections;
import java.util.List;

/**
 * 工装型号信息导入
 *
 * 数据导入导出参考：
 */
@Slf4j
@Component
public class BsMtoolMdImportTemplate extends AbstractExcelImportDataExtPointImpl<BsMtoolMd>
        implements ExcelTemplateInit, ExcelImportDataExtPoint<BsMtoolMd> {

    public static final String TEMPLATE_NAME = "工装型号信息导入";

    @Override
    public List<ExcelWorkbookDefinition> generator() {
        return Collections.singletonList(ExcelHelper.fixedHeader(BsMtoolMd.MODEL_MODEL, TEMPLATE_NAME)
                .setType(ExcelTemplateTypeEnum.IMPORT)
                .createSheet("工装型号信息列表")
                .createBlock(BsMtoolMd.MODEL_MODEL)
                // orgCode类似这样的字段通常Excel导入模版会写组织名称,在导入逻辑中查询
                .addColumn("orgCode", "组织编码")
                .addColumn("mmdCode", "工装型号编码")
                .addColumn("mmdName", "工装型号名称")
                .addColumn("mttypeCode", "工装分类编码")
                .addColumn("mmdType", "特殊分类")
                // 补充其他字段
                .addColumn("munit", "单位")
                .addColumn("defStoreCode", "默认仓库编码")
                .addColumn("defStorelocCode", "默认储位编码")
                .addColumn("ukWarnTimes", "保养预警使用次数")
                .addColumn("fwUkWarnTimes", "提前保养预警使用次数")
                .addColumn("ukWarnDays", "保养预警使用天数")
                .addColumn("fwUkWarnDays", "提前保养预警使用天数")
                .addColumn("isMtoolRcvtn", "工装启用领用与归还")
                .addColumn("isMtoolChk", "工装启用日点检")
                .addColumn("needAdjust", "需校准")
                .addColumn("iadjExpDay", "内部校准间隔天数")
                .addColumn("price", "单价（RMB）")
                .addColumn("isValid", "启用")
                .addColumn("remark", "备注")
                .build());
    }

    @Override
    @ExtPoint.Implement(expression = "importContext.definitionContext.model == \"" + BsMtoolMd.MODEL_MODEL + "\" && importContext. definitionContext.name == \"" + TEMPLATE_NAME + "\"")
    public Boolean importData(ExcelImportContext importContext, BsMtoolMd data) {
        ExcelImportTask importTask = importContext.getImportTask();
        if (data == null) {
            importTask.addTaskMessage(TaskMessageLevelEnum.ERROR, "导入文件数据为空，请填写数据");
            return Boolean.FALSE;
        }

        if(StringUtils.isBlank(data.getMmdCode())){
            // 返回true表示继续读下一行。返回false表示中断
            importTask.addTaskMessage(TaskMessageLevelEnum.ERROR, "工装型号编码不能为空");
            return Boolean.TRUE;
        }

        if(StringUtils.isBlank(data.getMmdName())){
            // 返回true表示继续读下一行。返回false表示中断
            importTask.addTaskMessage(TaskMessageLevelEnum.ERROR, "工装型号名称不能为空");
            return Boolean.TRUE;
        }

        data.create();
        // 其他数据校验
        return Boolean.TRUE;
    }

}
